package ihm.controller;

import com.icesoft.faces.component.DisplayEvent;
import com.icesoft.faces.component.ext.HtmlDataTable;
import dao.QuestionFacadeLocal;
import entite.Question;
import entite.QuestionnaireQuestion;
import entite.Reponse;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.swing.text.Document;
import metier.GestionQuestionnaireQuestionLocal;

@ManagedBean
@ViewScoped
//@RequestScoped
public class QuestionRechercheController implements Serializable {

    @ManagedProperty(value = "#{questionnaireController}")
    private QuestionnaireController questionnaireController;
    @EJB
    private QuestionFacadeLocal questionFacade;
    @EJB
    private GestionQuestionnaireQuestionLocal gestionQuestionnaireQuestion;
    private boolean popupVisible = false;
    private String rechercheLibelleQuestion;
    private List<Question> listRechercheQuestion;
    private Question questionRechercher;

    /**
     * Setter questionnaireController
     * @param questionnaireController
     */
    public void setQuestionnaireController(QuestionnaireController questionnaireController) {
        this.questionnaireController = questionnaireController;
    }

    /**
     * Getter PopupVisible
     * @return true si visible
     *         false si invisible
     */
    public boolean isPopupVisible() {
        return popupVisible;
    }

    /**
     * Setter popupVisible
     * @param popupVisible
     */
    public void setPopupVisible(boolean popupVisible) {
        this.popupVisible = popupVisible;
    }

    /**
     * Getter rechercheLibelleQuestion
     * @return String de recherche
     */
    public String getRechercheLibelleQuestion() {
        return rechercheLibelleQuestion;
    }

    /**
     * Setter rechercheLibelleQuestion
     * @param rechercheLibelleQuestion
     */
    public void setRechercheLibelleQuestion(String rechercheLibelleQuestion) {
        this.rechercheLibelleQuestion = rechercheLibelleQuestion;
    }

    /**
     * Getter liste des questions recherchées
     * @return liste des questions recherchées
     */
    public List<Question> getListRechercheQuestion() {
        return listRechercheQuestion;
    }

    /**
     * Setter liste des questions recherchées
     * @param listRechercheQuestion
     */
    public void setListRechercheQuestion(List<Question> listRechercheQuestion) {
        this.listRechercheQuestion = listRechercheQuestion;
    }

    /**
     * Getter QuestionRechercher
     * @return QuestionRechercher
     */
    public Question getQuestionRechercher() {
        return questionRechercher;
    }

    /**
     * Setter QuestionRechercher
     * @param questionRechercher
     */
    public void setQuestionRechercher(Question questionRechercher) {
        this.questionRechercher = questionRechercher;
    }

    /** 
     * Constructeur
     */
    public QuestionRechercheController() {
    }

    /**
     * Méthode d'initialisation
     */
    @PostConstruct
    public void init() {
        setPopupVisible(false);
        setRechercheLibelleQuestion(null);
        setListRechercheQuestion(null);
        setQuestionRechercher(null);
    }

    /**
     * Méthode de fermeture de la popup
     */
    public void closePopup() {
        //listRechercheQuestion.clear();
        listRechercheQuestion=null;
        listReponse=null;
        //dataModelListQuestion=null;

//        FacesContext context = FacesContext.getCurrentInstance();
//        QuestionRechercheController myBean = (QuestionRechercheController) context.getELContext().getELResolver().getValue(context.getELContext(), null, "questionRechercheController");
//        DataModel h;
//        h = new ListDataModel(listRechercheQuestion);
//        context.getExternalContext().s
//        myBean.getMyInputText().resetValue();


        setPopupVisible(false);
    }

    /**
     * méthode d'affichage de la popup
     */
    public void openPopup() {
        setPopupVisible(true);
    }

    /**
     * méthode permettant de rechercher les questions suivant la recherche
     */
    public void rechercherQuestion() {                
        setListRechercheQuestion(questionFacade.cherchercheLibelle(getRechercheLibelleQuestion()));        
        for (QuestionnaireQuestion questionnaireQuestionTmp : questionnaireController.getQuestionnaire().getQuestionnaireQuestionCollection()) {
            getListRechercheQuestion().remove(questionnaireQuestionTmp.getQuestion());
        }
//        for (Question question : listRechercheQuestion) {
//            System.out.println("--------------------------------------");
//            System.out.println(question.getLibelle());
//            for (Reponse reponse : question.getReponseCollection()) {
//                System.out.println(reponse.getLibelle());
//            }
//            System.out.println("--------------------------------------");
//        }
        dataModelListQuestion = new ListDataModel(getListRechercheQuestion());

    }

    /**
     * Méthode permettant d'ajouter une question au questionnaire depuis la recherche
     */
    public void ajouterAuQuestionnaire() {
        //on recherche si la question à ajouter et déjà présente dans le questionnaire
        //sécurité car normalement on n'affiche pas les question déjà présente dans le questionnaire
        //mais cette recheche peut être lancer dans un autre questionnaire !
        boolean questionRechercherInQuestionnaire = false;
        for (QuestionnaireQuestion questionnaireQuestionTmp : questionnaireController.getQuestionnaire().getQuestionnaireQuestionCollection()) {
            if (getListRechercheQuestion().contains(questionnaireQuestionTmp.getQuestion())) {
                questionRechercherInQuestionnaire = true;
            }
        }

        //si la question n'est pas dans le questionnaire on l'ajoute
        if (!questionRechercherInQuestionnaire) {
            //permet de lier la question au questionnaire
            QuestionnaireQuestion questionnaireQuestion;
            questionnaireQuestion = gestionQuestionnaireQuestion.enregistrerQuestionnaireQuestion(questionnaireController.getQuestionnaire().getQuestionnaireQuestionCollection().size(), questionnaireController.getQuestionnaire(), questionRechercher);
            questionnaireController.getQuestionnaire().getQuestionnaireQuestionCollection().add(questionnaireQuestion);
            questionnaireController.enregistrerQuestionnaire();
        }

        //supprimer la question ajouter à la liste du rélutats de la recherche
        for (QuestionnaireQuestion questionnaireQuestionTmp : questionnaireController.getQuestionnaire().getQuestionnaireQuestionCollection()) {
            getListRechercheQuestion().remove(questionnaireQuestionTmp.getQuestion());
        }
    }

    /**
     * Getter ResultatVide
     * @return true : si pas de résultat
     *         false : si des résultats
     */
    public boolean getResultatVide() {
        boolean resultatRechercheVide = true;
        if (getListRechercheQuestion() != null && !getListRechercheQuestion().isEmpty()) {
            resultatRechercheVide = false;
        }
        return resultatRechercheVide;
    }

    public void chargerListReponse(DisplayEvent event){
        //dataModelListReponse = new ListDataModel(((Question) dataModelListQuestion.getRowData()).getReponseCollection());
        //setListReponse(((Question) dataModelListQuestion.getRowData()).getReponseCollection());
        
        

//            System.out.println("--------------------------------------");
//            for (Reponse reponse : dataModelListReponse) {
//                System.out.println(reponse.getLibelle());
//            }
//            System.out.println("--------------------------------------");
            
    }

    public void chargerListReponse2(){
        setAfficherReponse(true);
//        System.out.println("------------------------");
//        for (Reponse reponse : listReponse) {
//            System.out.println(reponse.getLibelle());
//        }
//        System.out.println("------------------------");
        //dataModelListReponse = new ListDataModel(((Question) dataModelListQuestion.getRowData()).getReponseCollection());
        setListReponse(((Question) dataModelListQuestion.getRowData()).getReponseCollection());
    }

    public void closePopup2() {
        listReponse=null;
        setAfficherReponse(false);
    }

    private List<Reponse> listReponse;
    private DataModel dataModelListQuestion;
    private DataModel dataModelListReponse;
    private boolean afficherReponse = false;
    private Question questionSelected;

    public Question getQuestionSelected() {
        return questionSelected;
    }

    public void setQuestionSelected(Question questionSelected) {
        this.questionSelected = questionSelected;
    }

    public boolean isAfficherReponse() {
        return afficherReponse;
    }

    public void setAfficherReponse(boolean afficherReponse) {
        this.afficherReponse = afficherReponse;
    }

    

    public List<Reponse> getListReponse() {
        return listReponse;
    }

    public void setListReponse(List<Reponse> listReponse) {
        this.listReponse = listReponse;
    }

    public DataModel getDataModelListQuestion() {
        return dataModelListQuestion;
    }

    public void setDataModelListQuestion(DataModel dataModelListQuestion) {
        this.dataModelListQuestion = dataModelListQuestion;
    }

    public DataModel getDataModelListReponse() {
        return dataModelListReponse;
    }

    public void setDataModelListReponse(DataModel dataModelListReponse) {
        this.dataModelListReponse = dataModelListReponse;
    }
    
}
